package com.medsys.appservice;

import java.util.List;

import com.medsys.dao.AtestadoDAO;
import com.medsys.dao.DAOFactory;
import com.medsys.model.Atestado;
import com.medsys.model.Paciente;
/**
 * Classe de servi�os para a classe {@link Paciente}
 * @author Felipe Lauksas
 *
 */
public class AtestadoAppService {
	/**
	 * M�todo para salvar um objeto do tipo {@link Paciente} no banco de dados.
	 * @param paciente do tipo {@link Pciente}.
	 */
	public Atestado salvar(Atestado atestado) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		AtestadoDAO atestadoDAO = daoFactory.getAtestadoDAO();

		try {

			daoFactory.iniciarTransacao();

			atestado = atestadoDAO.salvar(atestado);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return atestado;
	}
	/**
	 *	M�todo para alterar um objeto do tipo {@link Atestado} no banco de dados.
	 * @param atestado do tipo {@link Atestado}.
	 */
	public void alterar(Atestado atestado) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		AtestadoDAO atestadoDAO = daoFactory.getAtestadoDAO();

		try {

			daoFactory.iniciarTransacao();

			atestadoDAO.alterar(atestado);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
	}
	/**
	 * M�todo que retorna uma {@link List} com objetos do tipo {@link Atestado}.
	 * @return Objeto do tipo {@link List} populado com objetos do tipo {@link Atestado} de todo o banco de dados.
	 */
	public List<Atestado> listarTodos() {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		AtestadoDAO atestadoDAO = daoFactory.getAtestadoDAO();

		List<Atestado> listAtestados = null;
		
		try {

			listAtestados = atestadoDAO.listarTodos();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return listAtestados;

	}
	/**
	 * M�todo que pesquisa um objeto do tipo {@link Atestado} no banco de dados
	 * @param Objeto {@link Long} referente ao ID do atestado
	 * @return Objeto do tipo {@link Atestado}
	 */
	public Atestado pesquisarPorId(Long id) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		AtestadoDAO atestadoDAO = daoFactory.getAtestadoDAO();

		Atestado atestado = null;
		
		try {

			atestado = atestadoDAO.pesquisarPorId(id);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return atestado;

	}
	public Atestado pesquisarPorIdCarregandoPaciente(Long id) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		AtestadoDAO atestadoDAO = daoFactory.getAtestadoDAO();

		Atestado atestado = null;
		
		try {

			atestado = atestadoDAO.pesquisarPorIdCarregandoPaciente(id);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return atestado;

	}
}
